package core

import (
	"faker/project-public/global"
	"faker/project-public/initialize"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

type server interface {
	ListenAndServe() error
}

func RunServer() {
	Router := initialize.Routers()
	address := fmt.Sprintf(":%d", global.FAKER_CONFIG.System.Addr)
	//address := fmt.Sprintf(":%d", 9000)
	s := initServer(address, Router)
	// 保证文本顺序输出
	// In order to ensure that the text order output can be deleted
	time.Sleep(10 * time.Microsecond)
	global.FAKER_LOG.Error(s.ListenAndServe().Error()) //来启动服务器并开始监听请求。如果服务器启动过程中出现错误，则通过global.FAKER_LOG.Error()方法将错误信息记录到日志

}

/*
*
通过调用这个函数并传入相应的参数，你可以创建一个HTTP服务器，并使用Gin框架来处理请求和响应。
具体来说，这段代码创建了一个http.Server类型的实例，并设置了以下配置选项：
Addr: 服务器的地址，由传入的address参数指定。
Handler: 服务器的路由处理器，由传入的router参数指定。
ReadTimeout: 读取超时时间，设置为20秒。
WriteTimeout: 写入超时时间，设置为20秒。
MaxHeaderBytes: 最大头部字节数，设置为1MB（2的20次方字节）。
通过这些配置选项，你可以控制服务器的行为，例如设置读取和写入超时时间，以及限制最大头部字节数等
*/
func initServer(address string, router *gin.Engine) server {
	return &http.Server{
		Addr:           address,
		Handler:        router,
		ReadTimeout:    20 * time.Second,
		WriteTimeout:   20 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}
}
